using System;
using Sinacor.Servico.Bovespa.Titulo.Service.DataContract.Request;
using Sinacor.Servico.Bovespa.Titulo.BusinessEntity;

namespace Sinacor.Servico.Bovespa.Titulo.Service.ServiceImplementation.Translator
{
    /// <summary>
    /// Data: 08/01/2008
    /// Autor: Diogo Milanez
    /// Obs: Renomeado
    /// </summary>
    public static class TranslateConsultarTitulosRequest
    {
        /// <summary>
        /// Data: 08/01/2008
        /// Autor: Diogo Milanez
        /// Obs: Renomeado de TranslateConsultarTitulosRequestToTitulo para ToTitulo
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public static BusinessEntity.Titulo ToTitulo(DataContract.Request.ConsultarTitulosRequest from)
        {
            if (from == null) return null;

            Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Titulo to = new Sinacor.Servico.Bovespa.Titulo.BusinessEntity.Titulo();
            to.NomeSA = from.Empresa;

            if (from.Mercado.HasValue)
            {
                switch (from.Mercado.Value)
                {
                    case DataContract.Enum.TipoMercado.Vista:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.Vista;
                        break;
                    case DataContract.Enum.TipoMercado.OpcaoCompra:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoCompra;
                        break;
                    case DataContract.Enum.TipoMercado.OpcaoVenda:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoVenda;
                        break;
                    case DataContract.Enum.TipoMercado.ExercicioOpcaoCompra:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.ExercicioOpcaoCompra;
                        break;
                    case DataContract.Enum.TipoMercado.ExercicioOpcaoVenda:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.ExercicioOpcaoVenda;
                        break;
                    case DataContract.Enum.TipoMercado.Fracionario:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.Fracionario;
                        break;
                    case DataContract.Enum.TipoMercado.Estruturado:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.Estruturado;
                        break;
                    case DataContract.Enum.TipoMercado.Leilao:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.Leilao;
                        break;
                    case DataContract.Enum.TipoMercado.Termo:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.Termo;
                        break;
                    case DataContract.Enum.TipoMercado.LeilaoNaoCotados:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.LeilaoNaoCotados;
                        break;
                    case DataContract.Enum.TipoMercado.Futuro:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.Futuro;
                        break;
                    case DataContract.Enum.TipoMercado.VencimentoFuturo:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.VencimentoFuturo;
                        break;
                    case DataContract.Enum.TipoMercado.BOX:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.BOX;
                        break;
                    case DataContract.Enum.TipoMercado.IntegralizacaoResgateCotas:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.IntegralizacaoResgateCotas;
                        break;
                    case DataContract.Enum.TipoMercado.CotasETF:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.CotasETF;
                        break;
                    case DataContract.Enum.TipoMercado.OpcaoVendaCompra:
                        to.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoVendaCompra;
                        break;
                }
            }

            to.CodigoISIN = from.ISIN;
            to.Codigo = from.Codigo;
            to.DataPregao = from.DataPregao;
            return to;
        }
    }
}

